package cz.muni.fi.pa036.kiss.daoimpl;

import cz.muni.fi.pa036.kiss.Entity.Pokoj;
import cz.muni.fi.pa036.kiss.Entity.VybaveniPokoje;
import cz.muni.fi.pa036.kiss.dao.VybaveniPokojeDAO;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

public class VybaveniPokojeDAOImpl implements VybaveniPokojeDAO{
    @PersistenceContext
    private EntityManager em;

    public void setEntityManager(EntityManager em) {
        this.em = em;
    }
    @Override
    public void createVybPok(VybaveniPokoje vybaveni) {
        if (vybaveni == null) {
            throw new IllegalArgumentException("vybaveni is null");
        }
        if (vybaveni.getId() != null) {
            throw new IllegalArgumentException("vybaveni.id is not null");
        }

        em.persist(vybaveni);
    }

    @Override
    public VybaveniPokoje getById(Long id) {
        if (id == null) {
            throw new IllegalArgumentException("null id");
        }
        VybaveniPokoje vybaveniPokoje = em.find(VybaveniPokoje.class, id);
        return vybaveniPokoje;
    }

    @Override
    public void updateVybaveniPokoje(VybaveniPokoje vybaveni) {
       if (vybaveni == null) {
            throw new IllegalArgumentException("vybaveni is null");
        }
        if (vybaveni.getId() == null) {
            throw new IllegalArgumentException("vybaveni.id is null");
        }

        em.merge(vybaveni);
    }

    @Override
    public void deleteVybaveniPokoje(VybaveniPokoje vybaveni) {
        if (vybaveni == null) {
            throw new IllegalArgumentException("vybaveni is null");
        }
        if (vybaveni.getId() == null) {
            throw new IllegalArgumentException("vybaveni.id is null");
        }
        VybaveniPokoje c = em.find(VybaveniPokoje.class, vybaveni.getId());
        em.remove(c);
    }

    @Override
    public List<VybaveniPokoje> findAll() {
        Query query = em.createQuery("SELECT c FROM VybaveniPokoje c");
        List<VybaveniPokoje> results = query.getResultList();

        return results;
    }

    @Override
    public List<VybaveniPokoje> findByPokojId(Pokoj pokoj) {
        if (pokoj == null) {
            throw new IllegalArgumentException("null pokoj");
        }
        Long pokoj_id = pokoj.getId();
        Query query = em.createQuery("SELECT c FROM VybaveniKoleje c WHERE c.pokoj.id = pokoj_id");
        List<VybaveniPokoje> results = query.getResultList();

        return results;
    }
    
}
